<?php
Yii::import('application.modules.user.controllers.YumController');
Yii::import('application.modules.user.models.*');
Yii::import('application.modules.profile.models.*');
Yii::import('application.modules.registration.models.*');
class PostController extends Controller
{
    /**
     * @var CActiveRecord the currently loaded data model instance.
     */
    private $_model;

    /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array(
            array('allow', // allow all users to access 'index' and 'view' actions.
                'actions' => array('index', 'view'),
                'users' => array('*'),
            ),
            array('allow', // allow authenticated users to access all actions
                'users' => array('@'),
            ),
            array('deny', // deny all users
                'users' => array('*'),
            ),
        );
    }

    /**
     * Displays a particular model.
     */
    public function actionView()
    {
        $post = $this->loadModel();
        $comment = $this->newComment($post);
        $this->render('view', array(
            'model' => $post,
            'comment' => $comment,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model = new Post;
        $model->phones = array(new YumPhone);
        $model->section_id = 1;
        $model->category_id = 3;
        //print_r($model->getMetaData()); die;
        if (isset($_POST['Post'])) {
            $model->attributes = $_POST['Post'];
            $images = CUploadedFile::getInstancesByName('images');
            if (!isset($images) || count($images) === 0) {
                $images = CUploadedFile::getInstancesByName($model, 'images');
            }

            // proceed if the images have been set
            if (isset($images) && count($images) > 0) {
                foreach ($images as $image => $pic) {
                    $systemFileName = YumUser::generatePassword() . '.' . $pic->extensionName;
                    if ($pic->saveAs(Yii::getPathOfAlias('webroot') . '/images/post/' . $systemFileName)) {
                        $img_add = new YumPhoto;
                        $img_add->name = $pic->name;
                        $img_add->path = '/images/post/' . $systemFileName;
                        $img_add->post_id = $model->id;

                        $img_add->save();
                    } else {
                    }
                    // handle the errors here, if you want
                }
            }

            if ($model->save()) {
                if ($model->phones !== null and sizeof($model->phones) > 0) {
                    $phone = $model->phones[0];
                    if (isset($_POST['YumPhone'])) {
                        $phone->attributes = $_POST['YumPhone'];
                    }
                    $phone->post_id = $model->id;
                    $phone->save();
                    $this->redirect(array('view', 'id' => $model->id));
                }
            }
        }

        /*        $this->render('create', array(
            'model' => $model,
        ));*/
    }

    public function actionAddPhone()
    {
        //YumPhone::$_POST['phones'];
        /*$phones=array();
        if(Yii::app()->request->isAjaxRequest)
        {
            $phoneArray = CJSON::decode(Yii::app()->request->getParam(''));
            Yii::log(CVarDumper::dumpAsString($phoneArray),'vardump');
            /*foreach($phoneArray as $phoneItem) {
                $phone = new YumPhone();
                $phone->post_id = $phoneItem['post_id'];
                $phone->id = $phoneItem['id'];
                $phone->name = $phoneItem['name'];
            }*/
        /*}
        $phone = new YumPhone();
        $phone->post_id = -1;
        $phone->id = -1;
        $phone->name = 'enter phone';
        $phones[] = $phone;
        $this->renderPartial('_phone_form', array(
            'model' => $phones, false, true
        ));*/
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     */
    public function actionUpdate()
    {
        $model = $this->loadModel();
        if (isset($_POST['Post'])) {
            $model->attributes = $_POST['Post'];
            //print_r($_POST);die;
            $images = CUploadedFile::getInstancesByName('images');
            if (!isset($images) || count($images) === 0) {
                //$images = CUploadedFile::getInstancesByName($model, 'images');
            }

            // proceed if the images have been set
            if (isset($images) && count($images) > 0) {
                foreach ($images as $image => $pic) {
                    $systemFileName = YumUser::generatePassword() . '.' . $pic->extensionName;
                    if ($pic->saveAs(Yii::getPathOfAlias('webroot') . '/images/post/' . $systemFileName)) {
                        $img_add = new YumPhoto;
                        $img_add->name = $pic->name;
                        $img_add->path = '/images/post/' . $systemFileName;
                        $img_add->post_id = $model->id;

                        $img_add->save();
                    } else {
                    }
                    // handle the errors here, if you want
                }
            }
            if ($model->save()) {
                if ($model->phones !== null and sizeof($model->phones) > 0) {
                    $phone = $model->phones[0];
                    if (isset($_POST['YumPhone'])) {
                        $phone->attributes = $_POST['YumPhone'];
                    }
                    $phone->post_id = $model->id;
                    $phone->save();
                }
                $workTimes = $_POST['WorkTimes'];
                if ($workTimes !== null and sizeof($workTimes) > 0) {
                    WorkTimeWidget::saveAll($workTimes, $model->id);
                }
                $this->redirect(array('view', 'id' => $model->id));
            }
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     */
    public function actionDelete()
    {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $this->loadModel()->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(array('index'));
        }
        else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Lists all models.
     */
    public function actionIndex()
    {
        $criteria = new CDbCriteria(array(
            'condition' => 'status=' . Post::STATUS_PUBLISHED,
            'order' => 'update_time DESC',
            'with' => 'commentCount',
        ));
        if (isset($_GET['tag']))
            $criteria->addSearchCondition('tags', $_GET['tag']);

        $dataProvider = new CActiveDataProvider('Post', array(
            'pagination' => array(
                'pageSize' => Yii::app()->params['postsPerPage'],
            ),
            'criteria' => $criteria,
        ));

        $this->render('index', array(
            'dataProvider' => $dataProvider,
        ));
    }

    /**
     * Manages all models.
     */
    public function actionAdmin()
    {
        $model = new Post('search');
        if (isset($_GET['Post']))
            $model->attributes = $_GET['Post'];
        $this->render('admin', array(
            'model' => $model,
        ));
    }

    /**
     * Suggests tags based on the current user input.
     * This is called via AJAX when the user is entering the tags input.
     */
    public function actionSuggestTags()
    {
        if (isset($_GET['q']) && ($keyword = trim($_GET['q'])) !== '') {
            $tags = Tag::model()->suggestTags($keyword);
            if ($tags !== array())
                echo implode("\n", $tags);
        }
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     */
    public function loadModel()
    {
        if ($this->_model === null) {
            if (isset($_GET['id'])) {
                if (Yii::app()->user->isGuest)
                    $condition = 'status=' . Post::STATUS_PUBLISHED . ' OR status=' . Post::STATUS_ARCHIVED;
                else
                    $condition = '';
                $this->_model = Post::model()->findByPk($_GET['id'], $condition);
            }
            if ($this->_model === null)
                throw new CHttpException(404, 'The requested page does not exist.');

            $phones = YumPhone::model()->findAll('post_id=:postId', array(':postId' => $this->_model->id));
            if ($phones !== null and sizeof($phones) > 0) {
                $phones = array($phones[0]);
            } else {
                $phone = new YumPhone;
                $phone->post_id = $_GET['id'];
                $phone->name = 'test';
                $phones = array($phone);
            }
            $this->_model->phones = $phones;
            $photos = YumPhoto::model()->findAll('post_id=:postId', array(':postId' => $this->_model->id));
            $this->_model->photos = $photos;
        }
        return $this->_model;
    }

    /**
     * Creates a new comment.
     * This method attempts to create a new comment based on the user input.
     * If the comment is successfully created, the browser will be redirected
     * to show the created comment.
     * @param Post the post that the new comment belongs to
     * @return Comment the comment instance
     */
    protected function newComment($post)
    {
        $comment = new Comment;
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'comment-form') {
            echo CActiveForm::validate($comment);
            Yii::app()->end();
        }
        if (isset($_POST['Comment'])) {
            $comment->attributes = $_POST['Comment'];
            if ($post->addComment($comment)) {
                if ($comment->status == Comment::STATUS_PENDING)
                    Yii::app()->user->setFlash('commentSubmitted', 'Thank you for your comment. Your comment will be posted once it is approved.');
                $this->refresh();
            }
        }
        return $comment;
    }

    public function renderMenu()
    {
        if (Yii::app()->user->isAdmin())
            $this->widget('YumAdminMenu');
        else if (!Yii::app()->user->isGuest)
            $this->widget('UserMenu');
    }
}
